Skip to main content

2.docker 部署学习 + github action

· 2 min read

github action 结合docker打包镜像上传到阿里云并且自动部署

name: Docker Image CI
on:
push:
branches:
- main
paths-ignore:
- README.md
- LICENSE
jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Checkout Dockerfile
uses: actions/checkout@v2
# 使用Docker官方制作的action
# https://github.com/marketplace/actions/build-and-push-docker-images
# - name: Build and Push Docker Iamge
# uses: docker/build-push-action@v1
# with:
# registry: ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
# username: ${{ secrets.ALI_DOCKER_HUB_USN }}
# password: ${{ secrets.ALI_DOCKER_HUB_PWD }}
# repository: chasenzh/chasenzh-repository
# tag_with_sha: true

# 使用Aliyun操作指南提供的命令
- name: Push to Ali Docker Repository
run: |
docker login -u ${{ secrets.ALI_DOCKER_HUB_USN }} -p ${{ secrets.ALI_DOCKER_HUB_PWD }} ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
docker build . -f Dockerfile --tag ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/chasenzh/chasenzh-repository:latest
docker push ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/chasenzh/chasenzh-repository:latest
- name: Deploy
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.ALI_SERVER }}
username: ${{ secrets.ALI_USERNAME }}
password: ${{ secrets.ALI_DOCKER_HUB_PWD }}
port: ${{ secrets.ALI_SERVER_PORT }}
script: |
if [ "$( docker container inspect -f '{{.State.Running}}' blog-page )" == "true" ]
then
docker stop blog-page
docker container rm blog-page
else
echo "no container blog-page creating...."
fi
docker login -u ${{ secrets.ALI_DOCKER_HUB_USN }} -p ${{ secrets.ALI_DOCKER_HUB_PWD }} ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}
docker pull ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/chasenzh/chasenzh-repository
docker run -d -p 80:80 --name=blog-page ${{ secrets.ALI_DOCKER_HUB_REGISTRY }}/chasenzh/chasenzh-repository

docker 常用命令 示例

// 创建镜像,指定dockerfile文件
docker build -f Dockerfile.test -t test-react-nginx .
// 创建一个容器示例
docker run --rm -it -p 8090:83 test-react-nginx

// --build-arg 指定构建参数
docker build --build-arg "ENV=production" -t react-nginx-production .
docker build --build-arg "ENV=test" -t react-nginx-test .
docker run --rm -it -p 8090:80 react-nginx-production

docker ps // 查看容器列表
docker images // 查看镜像列表
docker stop | docker container stop // 停止容器
docker rm | docker container rm // 移除容器
docker rmi // 移除容器 i指images

// 挂载
-v file:containerFile

eg:
docker run --rm -it --name my-nginx1 -v /playground/www/blog:/usr/share/nginx/html:ro -v /etc/nginx/nginx.conf:/etc/nginx/conf.d/default.conf -p 80:80 -d nginx